/**
 * 工具管理API接口
 */

import axios from 'axios'

// 基础配置 - 统一使用vite代理配置
const API_BASE_URL = '/api'

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    // 可以在这里添加认证token等
    console.log('API Request:', config.method?.toUpperCase(), config.url)
    return config
  },
  (error) => {
    console.error('Request Error:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
apiClient.interceptors.response.use(
  (response) => {
    console.log('API Response:', response.status, response.config.url)
    return response.data  // 直接返回数据，而不是完整的response对象
  },
  (error) => {
    console.error('Response Error:', error.response?.status, error.config?.url)
    return Promise.reject(error)
  }
)

// 工具函数：过滤空值参数
const filterEmptyParams = (params?: any) => {
  if (!params || typeof params !== 'object') return {}
  const filtered: any = {}
  Object.entries(params).forEach(([key, value]) => {
    if (value !== '' && value !== null && value !== undefined) {
      filtered[key] = value
    }
  })
  return filtered
}

// 类型定义
export interface ToolParameter {
  param_name: string
  param_type: string
  description: string
  default_value: any
  is_required: boolean
}

export interface Tool {
  id?: number
  tool_type?: number  // 工具类型（1=基础工具,2=MCP工具）
  tool_name: string
  description: string
  is_enabled: boolean
  human_interactive_flag: number  // 人工交互标识（0=不需要人工交互,1=需要人工交互）
  parameters?: ToolParameter[]
  statusLoading?: boolean
  interactiveLoading?: boolean
}

export interface ToolCategory {
  id: number
  category_name: string
  category_code: string
  description: string
  is_enabled: number
  created_at: string
  updated_at: string
  statusLoading?: boolean
  // 计算属性，用于兼容现有代码
  tools_count?: number
  enabled_tools_count?: number
}

export interface ToolCategoryListResponse {
  total: number
  items: ToolCategory[]
}

export interface ToolCategoryDetailResponse extends ToolCategory {
  tools: Tool[]
}

export interface ToolCategoryStatusUpdate {
  is_enabled: number
}

export interface ToolsInCategoryResponse {
  category_id: number
  category_name: string
  category_code: string
  tools: any[]
}

// 新增：工具详情相关类型
export interface DetailTool {
  id: number
  parent_id: number
  tool_type: number  // 工具类型（1=基础工具,2=MCP工具）
  tool_name: string
  description: string
  is_enabled: boolean
  parameters: any[]
  created_at: string
  updated_at: string
  tool_type_display?: string  // 工具类型显示文本
  statusLoading?: boolean
}

export interface DetailToolListResponse {
  total: number
  items: DetailTool[]
}

export interface DetailToolStatusUpdate {
  is_enabled: boolean
}

export interface DetailToolSearchParams {
  page?: number
  page_size?: number
  parent_id?: number
  tool_type?: number  // 工具类型筛选（1=基础工具,2=MCP工具）
  tool_name?: string
  is_enabled?: boolean
}

export interface AvailableToolTypesResponse {
  available_types: string[]
  count: number
}

export interface InitializeToolsResponse {
  message: string
  results: Record<string, boolean>
  success_count: number
  total_count: number
}

export interface EnabledToolsResponse {
  enabled_tools: any[]
  count: number
}

export interface UpdateToolStatusResponse {
  message: string
  tool_name: string
  is_enabled: boolean
}

// 工具集查询参数
export interface ToolCategorySearchParams {
  page?: number
  page_size?: number
  category_name?: string
  category_code?: string
  is_enabled?: number
}

// 工具管理相关API
export const toolsApi = {
  // 获取工具集列表
  getCategories: (params?: ToolCategorySearchParams): Promise<ToolCategoryListResponse> => 
    apiClient.get('/tools', { params: filterEmptyParams(params) }),

  // 获取工具集详情
  getCategoryDetail: (toolsId: number): Promise<ToolCategoryDetailResponse> => 
    apiClient.get(`/tools/${toolsId}`),

  // 更新工具集状态
  updateCategoryStatus: (toolsId: number, data: ToolCategoryStatusUpdate): Promise<ToolCategory> => 
    apiClient.patch(`/tools/${toolsId}/status`, data),

  // 获取工具集中的具体工具列表
  getToolsInCategory: (toolsId: number): Promise<ToolsInCategoryResponse> => 
    apiClient.get(`/tools/${toolsId}/tools`),

  // 更新具体工具状态
  updateToolStatus: (toolsId: number, toolName: string, isEnabled: boolean): Promise<UpdateToolStatusResponse> => 
    apiClient.patch(`/tools/${toolsId}/tools/${toolName}/status`, null, { 
      params: { is_enabled: isEnabled } 
    }),

  // 更新具体工具人工交互标识
  updateToolInteractive: (toolsId: number, toolName: string, flag: number): Promise<{ message: string, tool_name: string, human_interactive_flag: number }> => 
    apiClient.patch(`/tools/${toolsId}/tools/${toolName}/interactive`, null, { 
      params: { human_interactive_flag: flag } 
    }),

  // 获取可用的工具类型
  getAvailableToolTypes: (): Promise<AvailableToolTypesResponse> => 
    apiClient.get('/tools/factory/available'),

  // 初始化所有工具到数据库
  initializeAllTools: (): Promise<InitializeToolsResponse> => 
    apiClient.post('/tools/factory/initialize'),

  // 获取启用的工具列表
  getEnabledTools: (): Promise<EnabledToolsResponse> => 
    apiClient.get('/tools/enabled/list'),

  // 新增：工具详情管理API
  // 获取工具详情列表
  getDetailTools: (params?: DetailToolSearchParams): Promise<DetailToolListResponse> => 
    apiClient.get('/tools/detail', { params: filterEmptyParams(params) }),

  // 获取单个工具详情
  getDetailTool: (toolId: number): Promise<DetailTool> => 
    apiClient.get(`/tools/detail/${toolId}`),

  // 更新工具详情状态
  updateDetailToolStatus: (toolId: number, data: DetailToolStatusUpdate): Promise<DetailTool> => 
    apiClient.patch(`/tools/detail/${toolId}/status`, data)
}

export default apiClient
